package cn.skyclass.net
{
	import flash.utils.Dictionary;
	
	import mx.rpc.soap.WebService;
	
	/**
	 * 用于 web service 的管理
	 */
	public class WsPool
	{
		public function WsPool(singletonEnforcer:SingletonEnforcer){}
		
		private static var instance:WsPool;		
		public static function getInstance():WsPool{
			if(instance == null){
				instance = new WsPool(new SingletonEnforcer());
			}
			return instance;
		}		
		
		private var wsDic:Dictionary = new Dictionary();
		
		/**
		 * 根据键值来获取指定的 web service，
		 * 若不存在，则返回 null
		 */
		public function getWebService(key:String):WebService{
			return this.wsDic[key];
		}
		
		/**
		 * 将一个 web service 放入池中。
		 * 若此 web service 已经存在，则替换之并返回旧的 web service，
		 * 否则直接将此 web service 加入池中，并返回 null
		 */
		public function putWebService(key:String, ws:WebService):WebService{
			var old:WebService = this.wsDic[key];
			this.wsDic[key] = ws;
			return old;
		}
		
		
		/**
		 * 获取一个完整的 wsdl
		 * 
		 * @param name wsdl 的名称，如 UserService
		 * @param prefix 拼装 wsdl 时使用的前缀字符，包括域名和上下文路径等
		 * 		eg: http://localhost:8080/java-web-tester/services
		 * 		default: http://{server.name}:{server.port}/{context.root}/services
		 * @return 
		 */		
		public static function getWsdl(name:String, prefix:String=null):String{
			if(!prefix){
				prefix = URLUtilEx.getSiteRootUrl() + "services";
			}
			return prefix + "/" + name + "?wsdl";
		}
		
	}
}


// just can access this class in this file
class SingletonEnforcer {}

